package teaching;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2022-11-07
 * Time: 21:28
 */

//插入排序
public class InsertSort {
    public static void main(String[] args) {
        int[] arr = new int[80000];
        //产生随机数
        for (int i = 0; i < 80000; i++) {
            arr[i] = (int) (Math.random()*800000); //生成[0-800000)数
        }
        Date data1 = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date1 = simpleDateFormat.format(data1);
        System.out.println("排序前的时间输出=" + date1);

        //运行插入排序
        insertSort(arr);

        Date data2 = new Date();
        String date2 = simpleDateFormat.format(data2);
        System.out.println("排序后的时间输出=" + date2);

    }


    public static void insertSort(int[] arr){
        for (int i = 1; i < arr.length; i++) {
            int insertVal = arr[i];
            int insertIndex = i-1; //arr[1] 前面那个数的下标

            //给insertVal找到插入的位置
            //insertVal < arr[insertIndex] 就是34 < 101 待插入的数据还没找到位置
            //将arr[insertIndex] 后移
            while (insertIndex >= 0 && insertVal < arr[insertIndex]){
                arr[insertIndex+1] = arr[insertIndex];
                //101，101，119，1
                insertIndex--;
            }
            if (insertIndex + 1 != i){
                arr[insertIndex+1] = insertVal;
            }

            //System.out.println("第"+ i+"轮数据 " + Arrays.toString(arr));
        }
    }
    //逐步推到
    public static void insertSort1(int[] arr){
        //第一轮结果(34,101,119,1)
        //定义一个待插入的数
        int insertVal = arr[1];
        int insertIndex = 1-1; //arr[1] 前面那个数的下标


        //给insertVal找到插入的位置
        //insertVal < arr[insertIndex] 就是34 < 101 待插入的数据还没找到位置
        //将arr[insertIndex] 后移
        while (insertIndex >= 0 && insertVal < arr[insertIndex]){
            arr[insertIndex+1] = arr[insertIndex];
            //101，101，119，1
            insertIndex--;
        }
        arr[insertIndex+1] = insertVal;
        System.out.println("第一轮数据 " + Arrays.toString(arr));


        //第二轮
        insertVal = arr[2];
        insertIndex = 2-1; //arr[1] 前面那个数的下标
        //给insertVal找到插入的位置
        //insertVal < arr[insertIndex] 就是34 < 101 待插入的数据还没找到位置
        //将arr[insertIndex] 后移
        while (insertIndex >= 0 && insertVal < arr[insertIndex]){
            arr[insertIndex+1] = arr[insertIndex];
            //101，101，119，1
            insertIndex--;
        }
        arr[insertIndex+1] = insertVal;
        System.out.println("第二轮数据 " + Arrays.toString(arr));

        //第三轮 相当于给第四个数找位置
        insertVal = arr[3];
        insertIndex = 3-1; //arr[1] 前面那个数的下标
        //给insertVal找到插入的位置
        //insertVal < arr[insertIndex] 就是34 < 101 待插入的数据还没找到位置
        //将arr[insertIndex] 后移
        while (insertIndex >= 0 && insertVal < arr[insertIndex]){
            arr[insertIndex+1] = arr[insertIndex];
            //101，101，119，1
            insertIndex--;
        }
        arr[insertIndex+1] = insertVal;
        System.out.println("第三轮数据 " + Arrays.toString(arr));
    }
}
